package trail

import "fmt"

func double(n int) {
	n *= 2
}

func doubleWithPtr(n *int) {
	*n *= 2
}

func PointArgument() {
	n := 100

	double(n)
	fmt.Printf("使用普通变量作为函数参数执行完成后, n = %d\n", n) // 可以看到，变量值并未发生变化

	doubleWithPtr(&n)
	fmt.Printf("使用指针变量作为函数参数执行完成后, n = %d\n", n) // 变量值已经发生变化
}

func SliceArgument(nums *[3]int) {
	defer fmt.Printf("%T %v \n", nums, nums)
	defer func() {
		if r := recover(); r != nil {
			fmt.Printf("捕获到 1 个错误: %v\n", r)
		}
	}()
	nums[2] = 9999999
}
